/**
*Proyecto: Autopista V.1
*VehiculoService.java
*Fecha Creacion: 27 Junio del 2013
*SWITZ Software Artists Derechos Reservados R
*/


package mx.com.switz.autopista.service;

import java.util.ArrayList;
import mx.com.switz.autopista.dto.Empresa;
import java.util.List;

import mx.com.switz.autopista.dto.Empresa;
import mx.com.switz.autopista.dto.Estado;
import mx.com.switz.autopista.dto.FiltroBusqueda;
import mx.com.switz.autopista.dto.Vehiculo;
import mx.com.switz.autopista.exception.AutopistaException;
import mx.com.switz.autopista.vo.OpcionesCatalogo;
/**
*Interface que contiene los metodos de servicio del Vehiculo, sin implementacion
*@author Hector Silvar SWITZ Software Artists
*@author Jhonatan I. Ocampo SWITZ Software Artists
*@author Jovani Arzate Cabrera SWITZ Software Artists
*/
public interface VehiculoService {
	/**
	 * Metodo que inserta un Vehiculo
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Bandera de tipo boolean para verificar si se inserto el Vehiculo
	 */
	boolean addVehiculo(Vehiculo vehiculo, int IdEmpresa, ArrayList<String> urlFoto)throws AutopistaException;
	
	/**
	 * Metodo que actualiza un vehiculo
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Bandera de tipo boolean para verificar si se modifico el Vehiculo
	 */
	boolean editVehiculo(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que elimina un vehiculo
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Bandera de tipo boolean para verificar si se elimino el Vehiculo
	 */
	boolean removeVehiculo(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que busca un Vehiculo por su Id
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Vehiculo Retorna el vehiculo encontrado
	 */
	Vehiculo getVehiculoByID(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que busca los datos de un cliente, a traves de el Id vehiculo
	 * @param vehiculo Objeto del tipo Vehiculo
	 * @return Cliente Retorna los datos del cliente encontrado
	 */
	Empresa getEmpresaByVehiculo(Vehiculo vehiculo)throws AutopistaException;
	
	/**
	 * Metodo que obtiene una lista de Vehiculo segun el estado
	 * @param Estado Objeto del tipo Estado
	 * @return List Retorna una lista de tipo Vehiculos
	 */
	List<Vehiculo> selectVehiculoByEstado()throws AutopistaException;
	/**
	 *Metodo que devuelve una Lista de Vehiculos de cierta empresa
	 * @return List devuelve una lista
	 */
	List<Vehiculo> selectVehiculoByEmpresa(Empresa empresa)throws AutopistaException;
	
	/**
	 * Metodo que realiza la busqueda de vehiculo por medio de los filtros.
	 * @param  filtro Objeto de tipo filtros.
	 * @return Lista de vehiculos que cumplen con los filtros. 
	 * @throws AutopistaException
	 */
	List<Vehiculo>  searchVehiculo(FiltroBusqueda filtro) throws AutopistaException;
	
	/**
	 * Metodo para obtener el catalogo de Combustibles 
	 * @return Lista de combustibles
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> getVehiculoCombustible() throws AutopistaException;
	
	/**
	 * Metodo para obtener el catalogo de Marcas
	 * @return Lista de Marcas
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> getVehiculoMarca() throws AutopistaException;
	
	/**
	 * Metodo para obtener los modelos dependiento de la marca seleccionada
	 * @param idMarca
	 * @return Lista de Modelos
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> getVehiculoModelo(Integer idMarca) throws AutopistaException;
	
	/**
	 * Metodo para obtener el tipo de vehiculo
	 * @return Lista de tipos de vehiculo
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> getVehiculoTipo() throws AutopistaException;
	
	/**
	 * Metodo para obtener las transmisiones
	 * @return Lista de transmisiones
	 * @throws AutopistaException En caso de ocurrior una excepcion
	 */
	List<OpcionesCatalogo> getVehiculoTransmision() throws AutopistaException;
	
	List<Vehiculo> findAllImagesByVehiculoId(Vehiculo vehiculo);
}
